package com.oceansoft.mobile.econsole.modules.base.biz;

import com.oceansoft.mobile.econsole.cache.memcache.CacheManager;

import java.util.List;
import java.util.Set;

/**
 * 业务对象缓存接口
 *
 * @author chenw
 */
public interface IBizObjCache {

    /**
     * 获得当前配置的MemcacheManager
     *
     * @return CacheManager
     */
    CacheManager getMemCacheManager();

    /**
     * 保存对象至Cache
     *
     * @param object 业务对象
     * @param <T>    <T extends BusinessObject>
     */
    <T extends IBizObjSerializable> void setInCache(T object);

    /**
     * 从Cache中删除业务对象
     *
     * @param object 业务对象
     */
    <T extends IBizObjSerializable> void deleteFromCache(T object);

    /**
     * 从Cache中获取业务对象
     *
     * @param clazz Class<T> 对象类型
     * @param id    主键
     * @return <T extends BusinessObject>
     */
    <T extends IBizObjSerializable> T getFromCache(Class<T> clazz, java.io.Serializable id);

    /**
     * 过滤掉New BusinessObject
     *
     * @param objects 待过滤业务对象集合
     * @return Set<T>
     */
    <T extends IBizObjSerializable> Set<T> filterNewBizObj(List<T> objects);

    /**
     * 过滤掉Not New BusinessObject
     *
     * @param objects 待过滤业务对象集合
     * @return Set<T>
     */
    <T extends IBizObjSerializable> Set<T> filterNotNewBizObj(List<T> objects);

    /**
     * 获取业务对象ID集合
     *
     * @param objects 获取业务对象ID集合
     * @return List<java.io.Serializable>
     */
    <T extends IBizObjSerializable> List<java.io.Serializable> getBizObjIds(List<T> objects);
}
